package com.example.myapplication.views;

import android.annotation.SuppressLint;
import android.app.AlertDialog;
import android.app.Dialog;
import android.content.DialogInterface;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.Window;
import android.widget.AdapterView;
import android.widget.Button;
import android.widget.ListView;
import android.widget.TextView;

import com.example.myapplication.R;
import com.example.myapplication.adapter.CourseAdapter;
import com.example.myapplication.base.BaseFragment;
import com.example.myapplication.bean.Course;
import com.example.myapplication.database.DBHelper;
import com.example.myapplication.widget.EmptyView;
import com.example.myapplication.widget.HeaderView;

import java.util.List;

// 课程页面显示及交互的Fragment
public class CoursesFragment extends BaseFragment implements View.OnClickListener{

   private HeaderView mHeaderView; // 页面顶部标题栏
   private ListView mLvCourse; // 课程列表
   private EmptyView mEmptyView; // 空数据时的展示视图
   private List<Course> mCourseList; // 课程列表数据
   private CourseAdapter mCourseAdapter; // 课程列表适配器
   private AlertDialog mDialog; // 对话框

   @Override
   protected int getLayoutId() {
      return R.layout.fragment_courses; // 返回布局文件资源ID
   }

   // 初始化视图
   @SuppressLint("WrongViewCast")
   @Override
   protected void initView() {
      mHeaderView = mView.findViewById(R.id.header_view); // 初始化页面顶部标题栏
      mHeaderView.setTitle("我的课程"); // 设置标题

      mLvCourse= mView.findViewById(R.id.lv_courses); // 初始化课程列表
      mEmptyView = mView.findViewById(R.id.empty_view); // 初始化空数据展示视图

      // 当课程列表无数据时，显示空数据视图
      mLvCourse.setEmptyView(mEmptyView);

      // 获取所有课程数据并初始化课程适配器
      mCourseList = DBHelper.getInstance(mContext).selectAllCourse();
      mCourseAdapter = new CourseAdapter(mCourseList, mContext);
      mLvCourse.setAdapter(mCourseAdapter); // 绑定课程适配器到课程列表

      // 为课程列表中的每个项设置点击事件监听
      mLvCourse.setOnItemClickListener(new AdapterView.OnItemClickListener() {
         @Override
         public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
            // 点击事件处理：更新课程名称并刷新课程列表
            Course course = (Course) view.getTag(R.integer.friend_tag);
            DBHelper.getInstance(mContext).updateCourseNameById(course.getCourse_name() + "s", course.getCourse_id());
            refreshCourseList(); // 刷新课程列表数据
         }
      });

      // 为课程列表中的每个项设置长按事件监听
      mLvCourse.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {
         @Override
         public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) {
            // 长按事件处理：显示删除对话框
            Course course = (Course) view.getTag(R.integer.friend_tag);
            showDeleteDialog2(course); // 显示删除对话框
            return true;
         }
      });
   }

   // 初始化事件监听
   @Override
   protected void initListener() {
      mHeaderView.setRightClickListener(this); // 设置页面顶部标题栏右侧按钮点击事件监听
   }

   // 处理点击事件
   @Override
   public void onClick(View v) {
      int id = v.getId();
      if (id == R.id.button_right) {
         addCourses(); // 执行添加课程操作
      }
   }

   // 显示删除对话框
   private void showDeleteDialog(Course course) {
      // 创建并显示带确定和取消按钮并可自定义内容的对话框
      AlertDialog.Builder builder = new AlertDialog.Builder(mContext);
      builder.setTitle("删除"); // 标题
      builder.setMessage("确定要删除吗？"); // 提示消息
      builder.setIcon(R.drawable.attention); // 图标
      builder.setNegativeButton("取消", new DialogInterface.OnClickListener() {
         @Override
         public void onClick(DialogInterface dialog, int which) {
            // 点击取消按钮的操作
         }
      });
      builder.setPositiveButton("确定", new DialogInterface.OnClickListener() {
         @Override
         public void onClick(DialogInterface dialog, int which) {
            // 点击确定按钮的操作：删除课程信息并刷新课程列表
            DBHelper.getInstance(mContext).deleteCourseById(course.getCourse_id());
            showToast(course.getCourse_name() + "信息被删除"); // 显示消息提示
            refreshCourseList(); // 刷新课程列表数据
         }
      });
      Dialog dialog = builder.create();
      dialog.show(); // 显示对话框
   }

   // 显示删除对话框2
   private void showDeleteDialog2(Course course){
      LayoutInflater inflater = LayoutInflater.from(mContext);
      View v = inflater.inflate(R.layout.dialog_attention, null); // 加载自定义布局文件
      TextView message = (TextView) v.findViewById(R.id.message);
      Button btn_sure = (Button) v.findViewById(R.id.button_right);
      Button btn_cancel = (Button) v.findViewById(R.id.button_left);
      message.setText("真的要删吗？");
      btn_sure.setOnClickListener(new View.OnClickListener() {
         @Override
         public void onClick(View v) {
            mDialog.cancel();
            DBHelper.getInstance(mContext).deleteCourseById(course.getCourse_id());
            showToast(course.getCourse_name() + "信息被删除"); // 显示消息提示
            refreshCourseList(); // 刷新课程列表数据
         }
      });
      btn_cancel.setOnClickListener(new View.OnClickListener() {
         @Override
         public void onClick(View v) {
            mDialog.cancel();
         }
      });
      AlertDialog.Builder builder = new AlertDialog.Builder(mContext);
      mDialog = builder.create();
      mDialog.show(); // 显示对话框
      Window window = mDialog.getWindow();
      window.setLayout(840, 600); // 设置对话框宽高
      window.setContentView(v);
   }

   // 刷新课程列表数据
   private void refreshCourseList() {
      mCourseList = DBHelper.getInstance(mContext).selectAllCourse();
      mCourseAdapter.updateData(mCourseList); // 更新课程列表数据
   }

   // 添加课程
   private void addCourses() {
      Log.d(TAG, "addCourses");
      Course course = new Course();
      course.setCourse_code("C001");
      course.setCourse_name("Advanced Mathematics");
      course.setCourse_teacher("Professor Smith");
      course.setLearning_hours("60");
      mCourseList.add(course); // 添加课程到列表
      DBHelper.getInstance(mContext).insertCourse(course); // （假设）插入课程到数据库

      Course course2 = new Course();
      course2.setCourse_code("C002");
      course2.setCourse_name("Data Structures");
      course2.setCourse_teacher("Professor Johnson");
      course2.setLearning_hours("80");
      mCourseList.add(course); // 添加课程到列表
      DBHelper.getInstance(mContext).insertCourse(course2); // （假设）插入课程到数据库

      refreshCourseList(); // 刷新课程列表数据以显示新添加的课程
   }
}
